package com.sjgl.esdn.service;

import com.sjgl.esdn.domain.TreeSelect;
import com.sjgl.esdn.domain.entity.Dept;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 部门服务
 *
 * @author 缪恒铭
 * @date 2022/08/15
 */
public interface DeptService {

    /**
     * 获得id通过部门名字
     *
     * @param deptName 部门名称
     * @return {@link Long}
     */
    public Long getIdByDeptName(@Param("deptName") String deptName);

    /**
     * 得到领导id
     *
     * @param deptId 部门id
     * @return {@code Long}
     */
    public Long getLeaderId(@Param("deptId") Long deptId);

    /**
     * 获得id列表通过部门名字列表
     *
     * @param deptNameList 部门名字列表
     * @return {@link List}<{@link Long}>
     */
    public List<Long> getIdListByDeptNameList(@Param("deptNameList") List<String> deptNameList);

    /**
     * 获得id列表
     *
     * @return {@link List}<{@link Long}>
     */
    public List<Long> getIdList();

    /**
     * 获得部门名字通过id
     *
     * @param deptId 部门id
     * @return {@link String}
     */
    public String getDeptNameById(@Param("deptId") Long deptId);

    /**
     * 获得部门名字列表通过id列表
     *
     * @param deptIdList 部门id列表
     * @return {@link List}<{@link String}>
     */
    public List<String> getDeptNameListByIdList(@Param("deptIdList") List<Long> deptIdList);

    /**
     * 获得部门名字列表
     *
     * @return {@link List}<{@link String}>
     */
    public List<String> getDeptNameList();

    /**
     * 检查部门唯一
     *
     * @param deptName 部门名称
     * @return boolean
     */
    public boolean checkDeptUnique(@Param("deptName") String deptName);

    /**
     * 查询部门管理数据
     *
     * @param dept 部门信息
     * @return 部门信息集合
     */
    public List<Dept> selectDeptList(Dept dept);

    /**
     * 查询部门树结构信息
     *
     * @param dept 部门信息
     * @return 部门树信息集合
     */
    public List<TreeSelect> selectDeptTreeList(Dept dept);

    /**
     * 构建前端所需要树结构
     *
     * @param depts 部门列表
     * @return 树结构列表
     */
    public List<Dept> buildDeptTree(List<Dept> depts);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param depts 部门列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildDeptTreeSelect(List<Dept> depts);

    /**
     * 是否存在部门子节点
     *
     * @param deptId 部门ID
     * @return 结果
     */
    public boolean hasChildByDeptId(Long deptId);
}
